package org.bouncycastle.crypto.params;

import java.math.BigInteger;

import org.bouncycastle.crypto.CipherParameters;

public class DHParameters implements CipherParameters {
    private BigInteger g;
    private BigInteger p;
    private BigInteger q;
    private int j;
    private DHValidationParameters validation;

    public DHParameters(BigInteger p, BigInteger g) {
        this.g = g;
        this.p = p;
    }

    public DHParameters(BigInteger p, BigInteger g, BigInteger q, int j) {
        this.g = g;
        this.p = p;
        this.q = q;
        this.j = j;
    }

    public DHParameters(BigInteger p, BigInteger g, BigInteger q, int j, DHValidationParameters validation) {
        this.g = g;
        this.p = p;
        this.q = q;
        this.j = j;
    }

    public BigInteger getP() {
        return p;
    }

    public BigInteger getG() {
        return g;
    }

    public BigInteger getQ() {
        return q;
    }

    public int getJ() {
        return j;
    }

    public DHValidationParameters getValidationParameters() {
        return validation;
    }

    public boolean equals(Object obj) {
        if (!(obj instanceof DHParameters)) {
            return false;
        }

        DHParameters pm = (DHParameters) obj;

        if (this.getValidationParameters() != null) {
            if (!this.getValidationParameters().equals(pm.getValidationParameters())) {
                return false;
            }
        } else {
            if (pm.getValidationParameters() != null) {
                return false;
            }
        }

        if (this.getQ() != null) {
            if (!this.getQ().equals(pm.getQ())) {
                return false;
            }
        } else {
            if (pm.getQ() != null) {
                return false;
            }
        }

        return (j == pm.getJ()) && pm.getP().equals(p) && pm.getG().equals(g);
    }
}
